home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / video / fly8111-.000 / fly8111- / fly8 / COMMON / plspeak.c < prev    next >
C/C++ Source or Header  |  1979-12-31  |  1KB  |  87 lines

  1. /* --------------------------------- plspeak.c ------------------------------ */
  2.  
  3. /* This is part of the flight simulator 'fly8'.
  4.  * Author: Eyal Lebedinsky (eyal@ise.canberra.edu.au).
  5. */
  6.  
  7. /* Sound device driver for the PC speaker, using plsound.
  8. */
  9.  
  10. #include "fly.h"
  11. #include "plsound.h"
  12. #include "pc8254.h"
  13.  
  14. #ifdef DJGPP
  15. #include <pc.h>
  16.  
  17. #define inp(p)         inportb(p)
  18. #define outp(p,b)    outportb(p,b)
  19.  
  20. #else
  21. #include <conio.h>
  22. #endif
  23.  
  24. LOCAL_FUNC void FAR
  25. SpkStart (int n)
  26. {
  27.     int    i;
  28.     Ulong    flags;
  29.  
  30.     flags = Sys->Disable ();
  31.  
  32.     i = inp (PORT_B);    /* get 8255 port B */
  33.     i |= 3;            /* turn on speaker */
  34.     outp (PORT_B, i);    /* set 8255 port B */
  35.     iefbr14 ();
  36.  
  37.     if (n < (int)(XTAL/0x0ffffL))
  38.         n = 0xffff;
  39.     else
  40.         n = (int)(XTAL / n);
  41.  
  42.     outp (COMMAND_REG, WRITE_CH2);
  43.     iefbr14 ();
  44.     outp (CHANNEL_2, n & 0x00ff);        /* LSB */
  45.     iefbr14 ();
  46.     outp (CHANNEL_2, (n >> 8) & 0x00ff);    /* MSB */
  47.     iefbr14 ();
  48.  
  49.     Sys->Enable (flags);
  50. }
  51.  
  52. LOCAL_FUNC void FAR
  53. SpkStop (void)
  54. {
  55.     int    i;
  56.     Ulong    flags;
  57.  
  58.     flags = Sys->Disable ();
  59.  
  60.     i = inp (PORT_B);    /* get 8255 port B */
  61.     i &= ~3;        /* turn off speaker */
  62.     outp (PORT_B, i);    /* set 8255 port B */
  63.     Sys->Enable (flags);
  64. }
  65.  
  66. static struct plsextra FAR SpkExtra = {
  67.     SpkStart,
  68.     SpkStop,
  69.     NULL,        /* beeps */
  70.     0L,        /* lasttime */
  71.     0L,        /* nexttime */
  72.     0,        /* playing */
  73.     0        /* nbeeps */
  74. };
  75.  
  76. struct SndDriver NEAR SndPlSpeaker = {
  77.     "PLSPEAK",
  78.     0,
  79.     &SpkExtra,
  80.     PlsInit,
  81.     PlsTerm,
  82.     PlsPoll,
  83.     PlsBeep,
  84.     PlsEffect,
  85.     PlsList
  86. };
  87.